package GUI;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;

import gra.Account;
import gra.Licytator;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class Licytacja extends JFrame 
{
    JLabel gracz;
    JLabel kwotaGracza;
    JLabel aktualnaStawka;
    JLabel stawka;
    
    
    JButton btnMniej;
    JButton btnWiecej;
    JButton btnCheck;
    JButton btnBet;
    JButton btnRaise;
    JButton btnCall;
    JButton btnFold;
    JButton btnAllIn;
    JButton btnPotwierdz;
    Image tlo;
    Licytator licytator;
    
    int ktoraOpcja;
    int aktualnaKwotaGracza = 0;
    final int MaxBet;
    int ktoryGracz;
    PokerTable poker;
    boolean czySkonczona = false;   //flaga okreslajaca czy gracz skonczyl licytacje
    
    public Licytacja( Licytator licytator, int MaxBet, boolean opcje[], final int ktoryGracz )
    {
        super("Licytacja");
        setBounds( 400, 90, 360, 360 );
        setLayout( null );
        setUndecorated( true );
        
        this.MaxBet     = MaxBet;
        this.licytator  = licytator;
        this.ktoryGracz = ktoryGracz;
        gracz           = new JLabel( "Gracz: " );
        kwotaGracza     = new JLabel( "Kwota: " );
        stawka          = new JLabel( "0" );
        aktualnaStawka  = new JLabel( this.MaxBet + "" );
                
        btnMniej        = new JButton( "<" );
        btnWiecej       = new JButton( ">" );
        btnPotwierdz    = new JButton( "Zatwierdz" );
        
        try
        {
            tlo = ImageIO.read( new File( "images/licytacjaBackground.png" ) ); 
        }catch( IOException e2 )
        {
            System.out.println("Brak pliku tla");
        }
        
        // -0-CHECK,1-BET,2-RAISE,3-CALL,4-FOLD,5-ALL-IN
        for( int i = 0; i < 6; i ++ )
        {
            if( opcje[i] )
            {
                switch(i)
                {
                    case 0 :
                    {
                        btnCheck = new JButton("Check");
                        break;
                    }
                    case 1 :
                    {
                        btnBet   = new JButton("Bet");
                        break;
                    }
                    case 2 :
                    {
                        btnRaise = new JButton("Raise");
                        break;
                    }
                    case 3 :
                    {
                        btnCall  = new JButton("Call");
                        break;
                    }
                    case 4 :
                    {
                        btnFold  = new JButton("Fold");
                        break;
                    }
                    case 5 :
                    {
                        btnAllIn = new JButton("All-in");
                        break;
                    }
                }
            }
        }
        
        stawka.setHorizontalAlignment( SwingConstants.CENTER );
        //rozmieszczenie
        
        gracz.setBounds         ( 20,  20,  200, 40 );
        kwotaGracza.setBounds   ( 20,  60,  100, 40 );
        aktualnaStawka.setBounds( 20,  100, 100, 40 );
        stawka.setBounds        ( 140, 140, 80,  40 );
        btnMniej.setBounds      ( 80,  140, 60,  40 );
        btnWiecej.setBounds     ( 220, 140, 60,  40 );
        //btnPotwierdz.setBounds  ( 80,  180, 100, 40 );
        
        //30
        //330
        for( int i = 0; i < 6; i ++ )
        {
            if( opcje[i] )
            {
                switch(i)
                {
                    case 0 :
                    {
                        btnCheck.setBounds( 30, 200, 100, 40 );
                        break;
                    }
                    case 1 :
                    {
                        btnBet.setBounds( 130, 200, 100, 40 );
                        break;
                    }
                    case 2 :
                    {
                        btnRaise.setBounds( 230, 200, 100, 40 );
                        break;
                    }
                    case 3 :
                    {
                        btnCall.setBounds( 30, 240, 100, 40 );
                        break;
                    }
                    case 4 :
                    {
                        btnFold.setBounds( 130, 240, 100, 40 );
                        break;
                    }
                    case 5 :
                    {
                        btnAllIn.setBounds( 230, 240, 100, 40 );
                        break;
                    }
                }
            }
        }
        
        
        //dodanie actionlistenerow
        
        
        for( int i = 0; i < 6; i ++ )
        {
            if( opcje[i] )
            {
                switch(i)
                {
                    case 0 :
                    {
                        btnCheck.addActionListener( new ActionListener() {
                            
                            @Override
                            public void actionPerformed(ActionEvent arg0)
                            {
                                ktoraOpcja = 0;
                                czySkonczona = true;
                                Licytacja.this.licytator.stol.gracze[ktoryGracz].bidHuman( Licytacja.this.licytator.MaxBet, Licytacja.this.licytator );
                                zakonczLicytacje();
                            }
                        });
                        
                        break;
                    }
                    case 1 :
                    {
                        btnBet.addActionListener( new ActionListener() {
                            
                            @Override
                            public void actionPerformed(ActionEvent e) 
                            {
                                ktoraOpcja = 1;
                                czySkonczona = true;
                                Licytacja.this.licytator.stol.gracze[ktoryGracz].bidHuman( Licytacja.this.licytator.MaxBet, Licytacja.this.licytator );
                                zakonczLicytacje();
                            }
                        });
                        
                        break;
                    }
                    case 2 :
                    {
                        btnRaise.addActionListener( new ActionListener() {
                            
                            @Override
                            public void actionPerformed(ActionEvent e) 
                            {
                                ktoraOpcja = 2;
                                czySkonczona = true;
                                Licytacja.this.licytator.stol.gracze[ktoryGracz].bidHuman( Licytacja.this.licytator.MaxBet, Licytacja.this.licytator );
                                zakonczLicytacje();
                            }
                        });
                        
                        break;
                    }
                    case 3 :
                    {
                        btnCall.addActionListener( new ActionListener() {
                            
                            @Override
                            public void actionPerformed(ActionEvent e) 
                            {
                                ktoraOpcja = 3;
                                czySkonczona = true;
                                Licytacja.this.licytator.stol.gracze[ktoryGracz].bidHuman( Licytacja.this.licytator.MaxBet, Licytacja.this.licytator );
                                zakonczLicytacje();
                            }
                        });
                        
                        break;
                    }
                    case 4 :
                    {
                        btnFold.addActionListener( new ActionListener() {
                            
                            @Override
                            public void actionPerformed(ActionEvent e) 
                            {
                                ktoraOpcja = 4;
                                czySkonczona = true;
                                Licytacja.this.licytator.stol.gracze[ktoryGracz].bidHuman( Licytacja.this.licytator.MaxBet, Licytacja.this.licytator );
                                zakonczLicytacje();
                            }
                        });
                        break;
                    }
                    case 5 :
                    {
                        btnAllIn.addActionListener( new ActionListener() {
                            
                            @Override
                            public void actionPerformed(ActionEvent e) 
                            {
                                ktoraOpcja = 5;
                                czySkonczona = true;
                                Licytacja.this.licytator.stol.gracze[ktoryGracz].bidHuman( Licytacja.this.licytator.MaxBet, Licytacja.this.licytator );
                                zakonczLicytacje();
                            }
                        });

                        break;
                    }
                }
                
                //TODO konczenie kolejki
                //kontrolerGry.koniecLicytacji();
                
            }
        }
        

        btnMniej.addActionListener( new ActionListener() 
                                    {
                                        
                                        @Override
                                        public void actionPerformed(ActionEvent arg0) 
                                        {
                                            if( Integer.parseInt( stawka.getText() ) > 0 )
                                            {
                                                aktualnaKwotaGracza += 1;//Integer.parseInt( stawka.getText() );
                                                stawka.setText( Integer.toString( Integer.parseInt( stawka.getText() ) - 1 ) );
                                                kwotaGracza.setText( "Kwota: "+Integer.toString( aktualnaKwotaGracza ) );
                                            }
                                        }
                                    }
        );
        
        btnWiecej.addActionListener( new ActionListener() 
                                    {
                                        
                                        @Override
                                        public void actionPerformed(ActionEvent arg0) 
                                        {
                                            if( aktualnaKwotaGracza > 0 )
                                            {
                                                aktualnaKwotaGracza -= 1;//Integer.parseInt( stawka.getText() );
                                                stawka.setText( Integer.toString( Integer.parseInt( stawka.getText() ) + 1 ) );
                                                kwotaGracza.setText( "Kwota: "+Integer.toString( aktualnaKwotaGracza ) );
                                            }
                                        }
                                    } 
        );
        
        //dodanie kontrolek
        
        for( int i = 0; i < 6; i ++ )
        {
            if( opcje[i] )
            {
                switch(i)
                {
                    case 0 :
                    {
                        add( btnCheck );
                        break;
                    }
                    case 1 :
                    {
                        add( btnBet );
                        break;
                    }
                    case 2 :
                    {
                        add( btnRaise );
                        break;
                    }
                    case 3 :
                    {
                        add( btnCall );
                        break;
                    }
                    case 4 :
                    {
                        add( btnFold );
                        break;
                    }
                    case 5 :
                    {
                        add( btnAllIn );
                        break;
                    }
                }
            }
        }
        
        add( gracz );
        add( kwotaGracza );
        add( stawka );
        add( btnMniej );
        add( btnWiecej );
        add( aktualnaStawka );
    }
    
    public void zakonczLicytacje()
    {
        licytator.licytacja( licytator.stol.gracze[ktoryGracz], ktoryGracz );
    }
    
    public boolean czySkonczona()
    {
        return czySkonczona;
    }
    
    public int[] wyslijDane()
    {
        int[] dane = new int[2];
        dane[0] = ktoraOpcja;
        dane[1] = Integer.parseInt( stawka.getText() );
        
        return dane;
    }
    
    public void ustawDane( String nazwa, int kwota )
    {
        gracz.setText( "Gracz: " + nazwa );
        kwotaGracza.setText( "Kwota: " + Integer.toString( kwota ) );
        aktualnaKwotaGracza = kwota;
    }
    
    public void paintComponent( Graphics g ) 
    {
        g.drawImage( tlo, 0, 0, 360, 360, null );
    }
}
